home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 34.zip
/
BS1 part 34
/
GFA basic training.adf
/
Sound
/
RHYTHMUS_MASCH.LST
< prev
next >
Wrap
File List
|
1989-06-01
|
7KB
|
256 lines
' Rhythmusmaschine
' Laden, Wiedergabe & Veraenderung von vier Digitalschwingungen
' interaktiv und synchron
@init
@lesen
@einschalten
@kanalbox
REPEAT
@mausselect
@kanalwahl_Ändern
UNTIL MOUSEK=2
' Alles aus dem Speicher freigeben
@ausschalten
END
'
> PROCEDURE init
DIM sample$(3)
DIM lÄnge&(3)
DIM speicheradr%(3)
DIM frei%(3)
DIM wert&(3)
RETURN
'
> PROCEDURE lesen
FOR i|=0 TO 3
' Fileselect mit Pfadvorgabe auf die Sample-Datei:
FILESELECT "Sample laden","Laden",":Samples/",sample$(i|)
IF sample$(i|)="" OR RIGHT$(sample$(i|))=":"
PRINT "Keinen Sample laden ??"
END
ENDIF
OPEN "I",#1,sample$(i|)
lÄnge&(i|)=LOF(#1)
CLOSE #1
IF SHR(lÄnge&(i|),1)>65535
PRINT "Sampledatei zu lang!!"
END
ENDIF
speicheradr%(i|)=MALLOC(lÄnge&(i|),&H2)
IF speicheradr%(i|)=0
PRINT "FATAL - Speicher kann nicht reserviert werden"
END
ENDIF
' Infos:
PRINT "Name: ";sample$(i|)
PRINT "Größe: ";lÄnge&(i|)
PRINT "Adresse:";HEX$(speicheradr%(i|))
BLOAD sample$(i|),speicheradr%(i|)
NEXT i|
RETURN
'
> PROCEDURE einschalten
' Initialisierung aller Kanäle, ohne einzuschalten
DPOKE &HDFF096,15
FOR i|=0 TO 3
LONG{(&HDFF0A0+&H10*i|)}=speicheradr%(i|)
DPOKE (&HDFF0A4+&H10*i|),SHR(lÄnge&(i|),1)
DPOKE (&HDFF0A6+&H10*i|),100
DPOKE (&HDFF0A8+&H10*i|),64
NEXT i|
RETURN
> PROCEDURE ausschalten
' Wiedergabe aus
DPOKE &HDFF096,15
CLS
FOR i|=0 TO 3
frei%(i|)=MFREE(speicheradr%(i|),lÄnge&(i|))
PRINT sample$(i|)
PRINT "Kanal: ";i|
PRINT "Sample-Period:";wert&(i|)
PRINT "--------------"
NEXT i|
RETURN
> PROCEDURE schiebe_regler(x%,y|,u$,g_x%,g_y|,min&,max&,VAR wert&)
'
u_breite%=LEN(u$)*8
b_breite%=MAX(u_breite%+10,g_x%+10,268)
b_hÖhe%=(12+10)+g_y|+(12+10)+10+(12+10)
mitte&=x%+b_breite%/2
'
' Hintergrund retten
COLOR 0
PBOX x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4
COLOR 1
' Box zeichnen
BOX x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4
BOX x%+3,y|+2,x%+b_breite%+3,y|+b_hÖhe%+2
ADD x%,3
ADD y|,2
' Überschrift setzen
BOX mitte&-(LEN(u$)*8)/2-2,y|+5,mitte&+(LEN(u$)*8)/2+2,y|+17
TEXT mitte&-(LEN(u$)*8)/2,y|+14,u$
' Box für Wert mit Wert
BOX mitte&-25,y|+12+10+g_y|+5,mitte&+25,y|+12+10+g_y|+17
tl|=LEN(STR$(wert&))*8
ty|=y|+12+10+g_y|+14
TEXT mitte&-tl|/2,ty|,wert&
' Slider zeichnen
sxl&=mitte&-109
sxr&=mitte&+109
syo&=y|+(12+10)+g_y|+(12+10)
syu&=syo&+10
BOX sxl&,syo&,sxr&,syu&
BOX sxl&-20,syo&,sxr&+20,syu&
TEXT sxl&-14,syu&-2,"-"
TEXT sxr&+6,syu&-2,"+"
' Sprite-Daten
sprite$=""
FOR i|=1 TO 18
sprite$=sprite$+CHR$(0)+CHR$(255)
NEXT i|
SPRITE #2,sprite$
' Ende Button
'
text$="Kanal Wechsel"
x1%=mitte&-(LEN(text$)*8+10)/2
x2%=mitte&+(LEN(text$)*8+10)/2
y1|=y|+b_hÖhe%-17
y2|=y|+b_hÖhe%-5
BOX x1%,y1|,x2%,y2|
TEXT mitte&-(LEN(text$)*8/2),y2|-3,text$
'
spy|=syo&+23
spx&=(sxl&-12)+(SUCC(wert&-min&)/(SUCC(max&-min&)/200))
SPRITE #2,spx&,spy|
'
REPEAT
WHILE MOUSEX>sxl&-20 AND MOUSEX<sxr&+20 AND MOUSEY>syo& AND MOUSEY<syu& AND MOUSEK=1
IF MOUSEX>sxl& AND MOUSEX<sxr&
spx&=MOUSEX-18
IF spx&<sxl&-11
spx&=sxl&-11
ELSE IF spx&>sxr&-30
spx&=sxr&-30
ENDIF
wert&=min&+SUCC(max&-min&)/200*(spx&-sxl&+11)
ELSE IF MOUSEX>sxr& AND MOUSEX<sxr&+20 AND wert&<max&
PAUSE 3
INC wert&
spx&=(sxl&-12)+(SUCC(wert&-min&)/(SUCC(max&-min&)/200))
ELSE IF MOUSEX>sxl&-20 AND MOUSEX<sxl& AND wert&>min&
PAUSE 3
DEC wert&
spx&=(sxl&-12)+(SUCC(wert&-min&)/(SUCC(max&-min&)/200))
ENDIF
IF LEN(STR$(wert&))*8<>tl|
COLOR 0
PBOX mitte&-24,y|+g_y|+28,mitte&+24,y|+g_y|+38
COLOR 1
ENDIF
tl|=LEN(STR$(wert&))*8
TEXT mitte&-tl|/2,ty|,wert&
SPRITE #2,spx&,spy|
'
DPOKE &HDFF0A6+kanal|*&H10,wert& ! Muss hier stehen, kontinuierliche Veraenderung
'
WEND
@mausselect
UNTIL MOUSEX>x1% AND MOUSEX<x2% AND MOUSEY>y1| AND MOUSEY<y2| AND MOUSEK=1
SPRITE #2
RETURN
> PROCEDURE kanalwahl_Ändern
selx&=MOUSEX
sely&=MOUSEY
IF selx&>250 AND selx&<405 AND sely&>33 AND sely&<44 AND MOUSEK=1
SELECT selx&
CASE 250 TO 270
kanal|=0
wert&=wert&(0) !Alten Wert fortsetzen
@schiebe_regler(180,90,"Frequenz-Einstellung",0,0,0,1000,wert&)
wert&(0)=wert& !Neuen Wert retten
CASE 295 TO 315
kanal|=1
wert&=wert&(1)
@schiebe_regler(180,90,"Frequenz-Einstellung",0,0,0,1000,wert&)
wert&(1)=wert&
CASE 340 TO 360
kanal|=2
wert&=wert&(2)
@schiebe_regler(180,90,"Frequenz-Einstellung",0,0,0,1000,wert&)
wert&(2)=wert&
CASE 385 TO 405
kanal|=3
wert&=wert&(3)
@schiebe_regler(180,90,"Frequenz-Einstellung",0,0,0,1000,wert&)
wert&(3)=wert&
ENDSELECT
ENDIF
RETURN
> PROCEDURE mausselect
PAUSE 2 ! Warte auf Benutzer
selx&=MOUSEX
sely&=MOUSEY
IF selx&>250 AND selx&<405 AND sely&>64 AND sely&<74 AND MOUSEK=1
SELECT selx&
CASE 250 TO 270
kan|=0
zeiger|=BCHG(zeiger|,0)
IF BTST(zeiger|,0)
TEXT 246,85,"AN "
DPOKE &HDFF096,&H8201
ELSE IF BTST(zeiger|,0)=FALSE!
TEXT 246,85,"AUS"
DPOKE &HDFF096,1
ENDIF
CASE 295 TO 315
kan|=1
zeiger|=BCHG(zeiger|,1)
IF BTST(zeiger|,1)
TEXT 246+46*kan|,85,"AN "
DPOKE &HDFF096,&H8202
ELSE IF BTST(zeiger|,1)=FALSE!
TEXT 246+46*kan|,85,"AUS"
DPOKE &HDFF096,2
ENDIF
CASE 340 TO 360
kan|=2
zeiger|=BCHG(zeiger|,2)
IF BTST(zeiger|,2)
TEXT 246+46*kan|,85,"AN "
DPOKE &HDFF096,&H8204
ELSE IF BTST(zeiger|,2)=FALSE!
TEXT 246+46*kan|,85,"AUS"
DPOKE &HDFF096,4
ENDIF
CASE 385 TO 405
kan|=3
zeiger|=BCHG(zeiger|,3)
IF BTST(zeiger|,3)
TEXT 246+46*kan|,85,"AN "
DPOKE &HDFF096,&H8208
ELSE IF BTST(zeiger|,3)=FALSE!
TEXT 246+46*kan|,85,"AUS"
DPOKE &HDFF096,8
ENDIF
ENDSELECT
ENDIF
RETURN
> PROCEDURE kanalbox
COLOR 1
FOR i|=0 TO 3
BOX 250+45*i|,64,270+45*i|,74
BOX 240+46*i|,77,280+46*i|,87
TEXT 256+45*i|,72,i|+1
TEXT 246+46*i|,85,"AUS"
NEXT i|
BOX 237,62,420,89
TEXT 274,60,"Kanal Schalter"
FOR i|=0 TO 3
BOX 250+45*i|,33,270+45*i|,44
TEXT 256+45*i|,42,i|+1
NEXT i|
BOX 247,32,408,46
TEXT 274,30,"Kanal auswahl"
RETURN